﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FrbaCommerce.Facturar_Publicaciones
{
    public partial class SeleccionarPublicacion : Form
    {
        Usuario user;
        public List<Publicacion> publicacionesSelec = new List<Publicacion>();
        public int totalPublicaciones;
        List<Publicacion> publicUsers = new List<Publicacion>();

        public SeleccionarPublicacion(Usuario user)
        {
            InitializeComponent();
            this.user = user;
            publicUsers = new Publicacion().ObtenerPublicaciones(this.user.Id);
            this.dgvPublicaciones.DataSource = publicUsers;
            totalPublicaciones = publicUsers.Count;
        }

        private void SeleccionarPublicacion_Load(object sender, EventArgs e)
        {
            CargarPublicaciones();
        }  

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            if (dgvPublicaciones.ColumnCount != 0)
            {
                publicacionesSelec = (List<Publicacion>)this.dgvPublicaciones.DataSource;
                int diferencia = publicUsers.Count - publicacionesSelec.Count;
                if (diferencia > 10 && MessageBox.Show("¿Está seguro de que desea dar de baja a la Empresa?\n", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                {
                    return;
                }
                this.Close();
            }
            else
            {
                MessageBox.Show("Debe seleccionar alguna Publicación.\n", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);           
            }
        }

        private void lnkAgregar_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (cmbPublicacion.SelectedItem != null)
            {
                List<Publicacion> publicaSeleccionadas = new List<Publicacion>();
                if (this.dgvPublicaciones.DataSource!= null)
                {
                   publicaSeleccionadas = (List<Publicacion>)this.dgvPublicaciones.DataSource;
                } 
                Publicacion p = new Publicacion();
                p.descripcion = cmbPublicacion.SelectedItem.ToString();
                p = p.ObtenerPublicacionPorDescripcion(p.descripcion);
                if (dgvPublicaciones.ColumnCount != 0)
                {
                    if (!publicaSeleccionadas.Contains(p))
                    {
                        publicaSeleccionadas.Add(p);
                    }
                }
                else
                {
                    publicaSeleccionadas.Add(p);
                }
                this.dgvPublicaciones.DataSource = null;
                publicaSeleccionadas = publicaSeleccionadas.OrderBy(f => f.fecha).ToList();
                this.dgvPublicaciones.DataSource = publicaSeleccionadas;                
                cmbPublicacion.Items.Remove(cmbPublicacion.SelectedItem);
            }
            else
            {
                MessageBox.Show("Debe seleccionar alguna Publicación.\n", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void lklEliminar_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (this.dgvPublicaciones.SelectedRows.Count > 0)
            {
                int aux = dgvPublicaciones.SelectedRows[0].Index;
                aux++;
                if (this.dgvPublicaciones.RowCount!= aux)
                {
                    MessageBox.Show("No se puede saltear la rendicion de publicaciones.\n", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    Publicacion p = (Publicacion)this.dgvPublicaciones.SelectedCells[0].OwningRow.DataBoundItem;
                    List<Publicacion> publicaSeleccionadas = (List<Publicacion>)this.dgvPublicaciones.DataSource;
                    this.cmbPublicacion.Items.Add(p.descripcion);
                    publicaSeleccionadas.Remove((Publicacion)this.dgvPublicaciones.SelectedCells[0].OwningRow.DataBoundItem);
                    dgvPublicaciones.DataSource = null;
                    publicaSeleccionadas = publicaSeleccionadas.OrderBy(f => f.fecha).ToList();
                    dgvPublicaciones.DataSource = publicaSeleccionadas;
                }                
            }
            else
            {
                MessageBox.Show("Debe seleccionar alguna publicación.\n", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void CargarPublicaciones()
        {
            Publicacion p = new Publicacion();
            bool resultado = p.CargarComboPublicacionesFinalizadas(this.user.Id, cmbPublicacion);
            if (!resultado)
            {
                MessageBox.Show("No tiene publicaciones para facturar", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                btnSeleccionar.Enabled = false;
                btnCancelar.Text = "Volver";             
            }
            else
            {
                List<Publicacion> publicaSeleccionadas = (List<Publicacion>)this.dgvPublicaciones.DataSource;
                foreach (Publicacion publicDgv in publicaSeleccionadas)
                {
                    if (cmbPublicacion.Items.Contains(publicDgv.descripcion))
                    {
                        cmbPublicacion.Items.Remove(publicDgv.descripcion);
                    }
                }                   
            }  
        }
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        
    }
}
